home *** CD-ROM | disk | FTP | other *** search
- #include "sky.h"
-
- extern struct nuttab
- {
- float f[2];
- char c[5];
- } nuttab[];
-
- nutate()
- {
-
- /*
- * uses radian, radsec, eday
- * sets psi, eps, dpsi, deps, obliq, gst, tobliq
- */
-
- double msun, mnom, noded, dmoon;
- struct nuttab *pp;
- double arg;
-
- /*
- * nutation of the equinoxes is a wobble of the pole
- * of the earths rotation whose magnitude is about
- * 9 seconds of arc and whose period is about 18.6 years.
- *
- * it depends upon the pull of the sun and moon on the
- * equatorial bulge of the earth.
- *
- * psi and eps are the two angles which specify the
- * true pole with respect to the mean pole.
- *
- * all coeffieients are from Exp. Supp. pp.44-45
- */
-
- pp = &nuttab[0];
- mnom = 296.104608 + 13.0649924465*eday + 9.192e-3*capt2
- + 14.38e-6*capt3;
- msun = 358.475833 + .9856002669*eday - .150e-3*capt2
- - 3.33e-6*capt3;
- noded = 11.250889 + 13.2293504490*eday - 3.211e-3*capt2
- - 0.33e-6*capt3;
- dmoon = 350.737486 + 12.1907491914*eday - 1.436e-3*capt2
- + 1.89e-6*capt3;
- node = 259.183275 - .0529539222*eday + 2.078e-3*capt2
- + 2.22e-6*capt3;
- mnom *= radian;
- msun *= radian;
- noded *= radian;
- dmoon *= radian;
- node *= radian;
-
- /*
- * long period terms
- */
-
-
- psi = -(17.2327+.01737*capt)*sin(node);
- eps = (9.2100+0.00091*capt)*cos(node);
- for(;;){
- if(pp->f[0]==0.){
- pp++;
- break;
- }
- arg = pp->c[0]*mnom + pp->c[1]*msun + pp->c[2]*noded
- + pp->c[3]*dmoon + pp->c[4]*node;
- psi += pp->f[0]*sin(arg);
- eps += pp->f[1]*cos(arg);
- pp++;
- }
-
- /*
- * short period terms
- */
-
- dpsi = 0.;
- deps = 0.;
- if((flags&APPARENT)==0){
- for(;;){
- if(pp->f[0]==0.){
- pp++;
- break;
- }
- arg = pp->c[0]*mnom + pp->c[1]*msun + pp->c[2]*noded
- + pp->c[3]*dmoon + pp->c[4]*node;
- dpsi += pp->f[0]*sin(arg);
- deps += pp->f[1]*cos(arg);
- pp++;
- }
- }
-
-
- psi = (psi+dpsi)*radsec;
- eps = (eps+deps)*radsec;
- dpsi *= radsec;
- deps *= radsec;
-
- obliq = 23.452294 - .0130125*capt - 1.64e-6*capt2
- + 0.503e-6*capt3;
- obliq *= radian;
- tobliq = obliq + eps;
-
- gst = 99.690983 + 360.9856473354*eday + .000387*capt2;
- gst -= 180.;
- gst = fmod(gst, 360.);
- if(gst < 0.)
- gst += 360.;
- gst *= radian;
- gst += psi*cos(obliq);
-
- /*
- * print true obliquity, mean obliquity, mean GST, and true GST.
- */
-
- /*
- printf("Mean. G. Sid. Time: ");
- prhms(gst-psi*cos(obliq),3);
- printf("\n");
- printf("App. G. Sid. Time: ");
- prhms(gst,3);
- printf("\n");
-
- printf("Goobie: %6.3f %6.3f %6.3f %6.3f\n", psi/radsec, eps/radsec, dpsi/radsec, deps/radsec);
-
- printf("Obliquity: ");
- prdms(tobliq,3);
- printf("\n");
- */
-
- }
-